Computer systems commonly include multiple processing components. Many computer applications span multiple “tenants” (multi-threaded, multi-process, clustered, multi-data-center, etc.). The multiple components may receive the same operations or instructions to execute. Problems may arise if the order of operations between two processing components can differ, leading to different states for the two processing components.
To alleviate this, systems may run order-critical processes through a single system component, and then replicate the end state out to any redundant (backup) components. See, for example, U.S. Pat. No. 7,434,096 “Match server for a financial exchange having fault tolerant operation”, U.S. Pat. No. 7,480,827 “Fault Tolerance And Failover Using Active Copy-Cat”, and U.S. Pat. No. 8,041,985 “Match Server For A Financial Exchange Having Fault Tolerant Operation” herein incorporated by reference. However, this type of architecture may limit the maximum throughput of the system to the shortest time the single system component can process an operation and then replicate its state to its peer machines.
Moreover, computer systems may depend on time/temporal based/controlled coordination to attempt to ensure that multiple components perform events or operations at the same (real) time, or in the same order. However, computer system clocks are susceptible to drift where the clock of one computer/processor may operate at a different, i.e. faster or slower, rate than the clock of another computer/processor. Thus, it can become difficult to ensure that different components perform time-based tasks concurrently or in the same or desired order. Current technologies such as, for example, Precision Time Protocol (PTP), pulse per second signals, or Lamport timestamps, can compensate for such drift across multiple computers to a few hundred nanoseconds to a few milliseconds. This is sufficient for most computer operations.
In a financial exchange environment, however, the total time spent on processing an order is usually small enough (on the order of 100 microseconds), that the drift between computer systems may cause uncertainty. Systems within an exchange may require the current time as an input to process an order, such as opening the market for trading at a precise time, or stopping matching on an expired futures contract. Furthermore, time may be used to discriminate among or otherwise arbitrate between near-simultaneously received transactions. In an active market, the incoming rate of orders can be high enough that the time drift between different system components may render the time difference between received transaction indistinguishable and cause the incoming customer requests to be processed in a different order than received by the various components. This may lead to non-deterministic behavior.